2023년 1월 19일
// venv에 pynecone을 설치합니다.
$ pip install pynecone-io
// root에 프로젝트 폴더를 생성하고, 그 안에서 pc init을 입력합니다.
$ mkdir my_app_name
$ cd my_app_name
$ pc init
survey // 생성한 프로젝트 폴더
├── assets // 기본 assets 폴더
│ └── favicon.ico
├── pcconfig.py // 기본 pyneconf config 파일
├── pynecone.db // 기본적으로 제공하는 sqliteDB
├── .web // 기본적으로 생성되는 NEXT.JS 프로젝트 폴더
└── survey // 생성한 프로젝트 폴더명과 같은 App 폴더
├── __init__.py
├── base_state.py // 추가한 state class 관리 파일
├── end.py // 추가 페이지
├── home.py // 추가 페이지
├── landing.py // 추가 페이지
└── survey.py // 기본 App 파일
import pynecone as pc
config = pc.Config(
app_name="hello",
bun_path="$HOME/.bun/bin/bun",
db_url="sqlite:///pynecone.db",
env=pc.Env.DEV,
)
예시용 깃허브 : https://github.com/pynecone-io/pynecone-examples/tree/main/twitter
a. App 파일 준비
import pynecone as pc
# bsae State 파일
from .base_state import State
# 추가 페이지들
from .landing import Landing
from .home import Home
from .end import End
# Add state and page to the app.
app = pc.App(state=State)
# Add Pages
app.add_page(Landing, path="/", title="파인콘")
app.add_page(Home, path="/home", title="설문조사")
app.add_page(End, path="/end", title="결과")
app.compile(),
b. state 및 db 준비
import pynecone as pc
# DB Model Class
class SurveyUser(pc.Model, table=True):
username: str
q_1: str
q_2: int
q_3: str
# Bse State Class
class State(pc.State):
name = "얼리페이"
q_1: str = ""
q_2: int = 0
q_3: str = ""
answers: list[SurveyUser]
# ------------------------------- Model.py ------------------------------
"""Database built into Pynecone."""
import sqlmodel
from pynecone import utils
from pynecone.base import Base
def get_engine():
"""Get the database engine.
Returns:
The database engine.
"""
url = utils.get_config().db_url
return sqlmodel.create_engine(url, echo=False)
class Model(Base, sqlmodel.SQLModel):
"""Base class to define a table in the database."""
...
@staticmethod
def create_all():
"""Create all the tables."""
engine = get_engine()
sqlmodel.SQLModel.metadata.create_all(engine)
c. 페이지 준비
import pynecone as pc
from .base_state import State
def Landing():
return pc.center(
pc.vstack(
pc.text(
"TODAY SURVEY!",
font_size='40px',
font_weight="bold"
),
pc.input(
on_change=State.change_name,
placeholder="Enter your name",
margin="20px 0 20px 0!important",
),
pc.link(
"Start",
display="block",
href="/home",
width="100%",
bg="#8262FE",
color="#fff",
padding="10px",
text_align="center",
font_weight="bold",
border_radius="5px",
_hover={
"opacity": 0.85,
},
),
width="600px",
bg="white",
padding="40px",
shadow="lg",
border_radius="lg",
),
width="100%",
height="100vh",
bg="linear-gradient(222.47deg, #8262FE 13.82%, #8238BC 50.46%, #561674 87.1%)"
)
fastAPI를 사용하기 때문에 fastAPI에 장점을 모두 가지고 있습니다.
(docs가 의미있을지는 모르겠습니다)
a. 리액트를 사용함으로서 생기는 문제
b. 상당히 많은 이슈
c. 컴파일 이후 자동 등록.. 삭제는?
d. 반쪽짜리 라우팅
e. 배포이슈
적어놓고 보니 단점에 적어둔 것들이 react를 사용하는 단점외에는 모두 개발이 진행됨에 따라 해결이 되는 단점들뿐입니다. 그에 반해 장점은 정말 쉬운 난이도로 풀스택 웹을 빠르게 만들수 있다는 장점이 있어 앞으로가 기대되는 프레임 워크인것 같습니다.